/*
给你一个二叉树的根节点 root ，按 任意顺序 ，返回所有从根节点到叶子节点的路径。

叶子节点 是指没有子节点的节点。
*/
#include <string>
#include <vector>

using namespace std;

struct TreeNode {
    int val;
    TreeNode* left;
    TreeNode* right;
    TreeNode() : val(0), left(nullptr), right(nullptr) {}
    TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
    TreeNode(int x, TreeNode* left, TreeNode* right) : val(x), left(left), right(right) {}
};

class Solution {
public:
    // 参数只能值传递，防止路径之间数据冲突
    void dfs(TreeNode* root, vector<string>& res, string path) {
        if (root == nullptr) {
            return;
        }

        path += to_string(root->val);

        // 到达一个叶子节点
        if (root->left == nullptr && root->right == nullptr) {
            res.push_back(path);
        } else {
            path += "->";
        }

        dfs(root->left, res, path);
        dfs(root->right, res, path);
    }

    vector<string> binaryTreePaths(TreeNode* root) {
        vector<string> res;

        dfs(root, res, "");
        return res;
    }
};